# @Time    :2025/4/7 20:30
"""
练习题 3：进程间通信（Queue）
编写一个 Python 程序，创建两个子进程，一个子进程用于生成 1 到 10 的随机整数并放入 Queue 中，
另一个子进程从 Queue 中取出这些整数并计算它们的总和。
主进程等待两个子进程执行完毕后，打印计算得到的总和。
"""
import multiprocessing
import os
import random

# 向队列中放数据
def func1(queue):
    for _ in range(10):
        num = random.randint(1, 10)  # 随机数生成的， 包含1，包含10
        queue.put(num)
        print(f"进程id{os.getpid()} 向队列中放入了数据{num}")


# 从队列中取数据
def func2(queue):
    total = 0
    while not queue.empty():
        num = queue.get()
        total += num
        print(f"从队列中取了随机数{num}，数据总和：{total}")
    return total


if __name__ == "__main__":
    qu = multiprocessing.Manager().Queue()
    p1 = multiprocessing.Process(target=func1, args=(qu,))
    p2 = multiprocessing.Process(target=func2, args=(qu,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print(p2.exitcode)  # 获取进程的状态码  0：子进程正常退出。
